home *** CD-ROM | disk | FTP | other *** search
- Program EX_0807;
- {Listing 18P - see documentation in TUTOR.SSS}
-
- uses SSS, crt;
- { For Pascal other than Turbo/Quick erase above line }
-
- const
- ARRIVL = 1;
- STARTA = 2;
- ENDACT = 3;
- NEXTAC = 4;
-
- TIMEL = 120;
-
- { For MS Pascal $include:'SSSP1.H' }
-
- var
- n, countr, server, ecode : integer;
- t0 : real;
-
- { For MS Pascal $include:'SSSP2.H' }
-
- procedure signal(s:string; v: real; w,d: integer);
- var x, y: integer;
- begin
- x := wherex;
- y := wherey;
- clreol;
- write(s,v:w:d);
- gotoxy(x,y);
- end;
-
- procedure prime;
- begin
- n := 0;
- countr := 0;
- server := 1;
- t0 := 0;
- INIQUE(2,1,1);
- INISTA(1,'bus',1,0,0,0);
- TALLY(1, server);
- CREATE(0, n);
- end;
-
- procedure resque;
- begin
- CLEARS(0);
- CLEARQ(0);
- while NQ(1) > 0 do begin REMVFQ(1,1); DISPOS; end;
- while NC > 0 do begin REMVFC(1); DISPOS; end;
- end;
-
- procedure endper;
- begin
- case countr of
- 0:
- begin
- SETSEE(777);
- SETANT(0);
- end;
- 1:
- writeln('# average avail.s duration ');
- 2:
- writeln(countr:1,QAVG(1):8:1,SAVG(1):8:3,
- (T - t0):9:2,' ');
- 3:
- begin
- writeln(countr:1,QAVG(1):8:1,SAVG(1):8:3,
- (T - t0):9:2,' ');
- QUEUE(2,0);
- resque;
- server := 1;
- REMVFQ(2,1);
- SETSEE(777);
- SETANT(1);
- end;
- 4:
- ;
- 5:
- writeln(countr:1,QAVG(1):8:1,SAVG(1):8:3,
- (T - t0):9:2,' ');
- 6:
- begin
- writeln(countr:1,QAVG(1):8:1,SAVG(1):8:3,
- (T - t0):9:2,' ');
- SIMEND(0);
- end;
- end;
- CLEARS(0);
- CLEARQ(1);
- countr := countr + 1;
- t0 := T;
- end;
-
- begin
-
- prime;
-
- repeat
- ecode := NEXTEV;
- if ecode > 0 then
- begin
- case ecode of
-
- ARRIVL: begin
- if n = countr*TIMEL then endper;
- n := n + 1;
- signal('Simulated time: ',T,7,2);
- SETA(1, EX(0.9));
- CREATE(EX(1), n);
- SCHED(0, NEXTAC, IDE);
- end;
-
- NEXTAC: if server > 0 then SCHED(0, STARTA, IDE)
- else QUEUE(1, 0);
-
- STARTA: begin
- SCHED(A(1), ENDACT, IDE);
- server := server - 1;
- TALLY(1, server);
- end;
-
- ENDACT: begin
- DISPOS;
- server := server + 1;
- TALLY(1, server);
- if NQ(1) > 0 then
- begin
- REMVFQ(1,1);
- SCHED(0, STARTA, IDE);
- end;
- end;
- end;
- end;
- until ecode = 0;
-
- end.